free()
ফাংশন: মেমোরি মুক্ত করাসি প্রোগ্রামিং ভাষায় free()
ফাংশনটি ডাইনামিক মেমোরি বরাদ্দকৃত মেমোরি ব্লক মুক্ত করার জন্য ব্যবহৃত হয়। যখন আপনি malloc()
, calloc()
, অথবা realloc()
এর মাধ্যমে মেমোরি বরাদ্দ করেন, তখন সেই মেমোরি ব্লকটি ব্যবহারের পর free()
ফাংশন ব্যবহার করে সেটি মুক্ত করা উচিত। এটি মেমোরির অপচয় প্রতিরোধ করতে সাহায্য করে এবং সিস্টেমের রিসোর্স পরিচালনাকে উন্নত করে।
void free(void *ptr);
ptr
: এটি সেই পয়েন্টার, যার মাধ্যমে আপনি ডাইনামিক মেমোরি বরাদ্দ করেছিলেন। মেমোরি মুক্ত করতে সেই পয়েন্টারটি free()
ফাংশনে পাঠানো হয়।free()
ফাংশনের কাজ:free()
ফাংশনটি কোনো ডাইনামিক মেমোরি ব্লককে মুক্ত করে দেয়, যা পূর্বে malloc()
, calloc()
, বা realloc()
ফাংশনের মাধ্যমে বরাদ্দ করা হয়েছিল।বিঃদ্রঃ: মেমোরি মুক্ত করার পর, পয়েন্টারটি
NULL
করে দেওয়া ভালো অভ্যাস, কারণ এটি একটি অবৈধ মেমোরি অ্যাক্সেসকে প্রতিরোধ করে।
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
// ডাইনামিক মেমোরি বরাদ্দ করা
ptr = (int *)malloc(5 * sizeof(int)); // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
if (ptr == NULL) {
printf("Memory allocation failed\n");
return 1; // মেমোরি বরাদ্দ ব্যর্থ হলে প্রোগ্রাম শেষ
}
// ডাইনামিক মেমোরির মধ্যে কিছু মান সন্নিবেশ করা
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
// ডাইনামিক মেমোরি ব্যবহার করা
printf("Allocated memory contents:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
// মেমোরি মুক্ত করা
free(ptr);
ptr = NULL; // মেমোরি মুক্ত করার পর পয়েন্টারটি NULL করা ভালো
return 0;
}
malloc()
ফাংশনটি ৫টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করে। এটি একটি পয়েন্টার ptr
ফিরিয়ে দেয়।free()
ফাংশনটি মেমোরি ব্লকটি মুক্ত করে দেয়, যা malloc()
ফাংশনের মাধ্যমে বরাদ্দ করা হয়েছিল।ptr = NULL;
করা হয়েছে, কারণ এটি পয়েন্টারকে একটি অবৈধ অবস্থায় (ডাঙ্গারাস পয়েন্টার) পৌঁছাতে দেয় না এবং ভবিষ্যতে পয়েন্টারটির ভুল ব্যবহার প্রতিরোধ করে।malloc()
বা calloc()
এর জন্য একবার free()
ব্যবহার করা উচিত। যদি মেমোরি মুক্ত না করা হয়, তবে এটি মেমোরি লিক সৃষ্টি করতে পারে, যেখানে মেমোরি ব্যবহৃত হলেও মুক্ত হয় না, যা শেষ পর্যন্ত সিস্টেমের মেমোরি কমিয়ে দিতে পারে এবং প্রোগ্রামটি স্লো হতে পারে।free()
এর মাধ্যমে মুক্ত করার পর, সেই পয়েন্টারটি NULL
করা উচিত, কারণ পরবর্তীতে সেই পয়েন্টারটি আবার ব্যবহৃত হলে এটি অবৈধ মেমোরি অ্যাক্সেস প্রতিরোধ করে।free()
করা উচিত নয়, কারণ এটি প্রোগ্রামে ক্র্যাশ বা অন্য সমস্যা সৃষ্টি করতে পারে।free()
ফাংশনটি ডাইনামিকভাবে বরাদ্দকৃত মেমোরি ব্লকগুলো মুক্ত করতে ব্যবহৃত হয়।malloc()
, calloc()
, বা realloc()
ব্যবহারের পরে free()
ব্যবহার করা অপরিহার্য।NULL
করা ভালো অভ্যাস, যাতে অবৈধ অ্যাক্সেস প্রতিরোধ করা যায়।common.read_more